
const _interopRequireDefault = require('@babel/runtime/helpers/interopRequireDefault');

exports.__esModule = true;
exports.default = void 0;

const _extends2 = _interopRequireDefault(require('@babel/runtime/helpers/extends'));

const _utils = require('../utils');

const _touch = require('../mixins/touch');

const _createNamespace = (0, _utils.createNamespace)('tabs');
const createComponent = _createNamespace[0];
const bem = _createNamespace[1];

const MIN_SWIPE_DISTANCE = 50;

const _default = createComponent({
  mixins: [_touch.TouchMixin],
  props: {
    count: Number,
    duration: [Number, String],
    animated: Boolean,
    swipeable: Boolean,
    currentIndex: Number,
  },
  computed: {
    style: function style() {
      if (this.animated) {
        return {
          transform: `translate3d(${-1 * this.currentIndex * 100}%, 0, 0)`,
          transitionDuration: `${this.duration}s`,
        };
      }
    },
    listeners: function listeners() {
      if (this.swipeable) {
        return {
          touchstart: this.touchStart,
          touchmove: this.touchMove,
          touchend: this.onTouchEnd,
          touchcancel: this.onTouchEnd,
        };
      }
    },
  },
  methods: {
    // watch swipe touch end
    onTouchEnd: function onTouchEnd() {
      const { direction } = this;
      const { deltaX } = this;
      const { currentIndex } = this;
      /* istanbul ignore else */

      if (direction === 'horizontal' && this.offsetX >= MIN_SWIPE_DISTANCE) {
        /* istanbul ignore else */
        if (deltaX > 0 && currentIndex !== 0) {
          this.$emit('change', currentIndex - 1);
        } else if (deltaX < 0 && currentIndex !== this.count - 1) {
          this.$emit('change', currentIndex + 1);
        }
      }
    },
    genChildren: function genChildren() {
      const h = this.$createElement;

      if (this.animated) {
        return h('div', {
          class: bem('track'),
          style: this.style,
        }, [this.slots()]);
      }

      return this.slots();
    },
  },
  render: function render() {
    const h = arguments[0];
    return h('div', {
      class: bem('content', {
        animated: this.animated,
      }),
      on: (0, _extends2.default)({}, this.listeners),
    }, [this.genChildren()]);
  },
});

exports.default = _default;
